package mireille.learning.devoir1;

import mireille.learning.devoir1.Exceptions.CompteException;
import mireille.learning.devoir1.Exceptions.DebitNonAutoriseException;
import mireille.learning.devoir1.Exceptions.OperationPourCrediterNonAutoriseException;

public class GestionAgence {

    /**
     * Test du compte bancaire
     */
    public static void main(String[] args) throws DebitNonAutoriseException, OperationPourCrediterNonAutoriseException {
        try {

        System.out.println("TEST COMPTE D'ÉPARGNE : ");
        CompteEpargne compteEpargneTest = new CompteEpargne("Mireille", "000123");
        compteEpargneTest.crediter(854.00);
        compteEpargneTest.debiter(418.45);
        System.out.println(compteEpargneTest.toString());
        compteEpargneTest.crediter(984.00);
        System.out.println("Votre solde après avoir crédité 984 euros est de : " + compteEpargneTest.getSolde() + " euros");
        compteEpargneTest.traitementQuotidien();
        System.out.println("Solde avec ajout de 5% interêts : " + compteEpargneTest.getSolde() + " euros");
        compteEpargneTest.debiter(-20);
        compteEpargneTest.crediter(-50);
        System.out.println();
        System.out.println("----------------------------------------------------------------------------");
        System.out.println();

        System.out.println("TEST COMPTE COURANT:");
        CompteCourant CompteCourantTest = new CompteCourant("Durant", "Rue du Marchand");
        CompteCourantTest.crediter(1354);
        System.out.println(CompteCourantTest.toString());
        CompteCourantTest.debiter(2000);
        System.out.println("Solde après un retrait de 2000 euros : " + CompteCourantTest.getSolde() + " Euros");
        CompteCourantTest.traitementQuotidien();
        System.out.println("Solde après avoir appliqué la commission de 2% : " + CompteCourantTest.getSolde() + " Euros");
        CompteCourantTest.crediter(1000.00);
        System.out.println("Solde actuelle après un versement de 1000 euros : " + CompteCourantTest.getSolde() + " Euros");
        CompteCourantTest.traitementQuotidien();
        System.out.println("Solde après avoir appliqué la commission de 2% sur un solde position : " + (double) ((int) (CompteCourantTest.getSolde() * 100)) / 100 + " Euros");

        System.out.println();
        System.out.println("----------------------------------------------------------------------------");
        System.out.println();

        System.out.println("TEST AGENCE BANCAIRE :");

        CompteCourant CompteCourantToto = new CompteCourant("Toto", "Rue Kennedy");
        CompteCourantToto.crediter(540.00);
        CompteCourantToto.debiter(750.00);
        CompteCourant CompteCourantTiti = new CompteCourant("Titi", "1230000");
        CompteCourantTiti.crediter(450.00);
        CompteEpargne CompteEpargneTata = new CompteEpargne("Tata", "54545");
        CompteEpargneTata.crediter(3500.00);
        AgenceBancaire AgenceBancaireTest = new AgenceBancaire();
        AgenceBancaireTest.ajouterCompte(CompteCourantTest);
        AgenceBancaireTest.ajouterCompte(compteEpargneTest);
        AgenceBancaireTest.ajouterCompte(CompteCourantToto);
        AgenceBancaireTest.ajouterCompte(CompteCourantTiti);


        System.out.println("Nom du client qui possède le compte numéro 0 : " + AgenceBancaireTest.rechercherCompte(0).getNom());
        System.out.println("Nom du client qui possède le compte numéro 1 : " + AgenceBancaireTest.rechercherCompte(1).getNom());
        System.out.println("Nom du client qui possède le compte numéro 2 : " + AgenceBancaireTest.rechercherCompte(2).getNom());
        System.out.println("Nom du client qui possède le compte numéro 3 : " + AgenceBancaireTest.rechercherCompte(3).getNom());
        AgenceBancaireTest.ajouterCompte(CompteEpargneTata);
        System.out.println("Nom du client qui possède le compte numéro 4 : " + AgenceBancaireTest.rechercherCompte(4).getNom() + "\n");

        CompteEpargne cc = new CompteEpargne("Marc", "Lecop");
        AgenceBancaireTest.supprimerCompte(cc);
//       System.out.println("Compte numéro 123 a été supprimé :");
        System.out.println("----------------------------------------------------------------------------");


        CompteCourant CompteCourantPaul = new CompteCourant("Paul", "rue Leclerc");
        CompteCourantPaul.debiter(254.00);
        AgenceBancaireTest.ajouterCompte(CompteCourantPaul);
        //Le compte numero 4 a disparu. Le compte suivant est automatiquement le 5.

        //System.out.println("Nom du client qui possède le compte numéro 5 : " + AgenceBancaireTest.rechercherCompte(5).getNom()); 
        System.out.println("\n" + "Recherche du compte numéro 1 :");
        System.out.println("----------------------------------------------------------------------------");
        System.out.println(AgenceBancaireTest.rechercherCompte(1));

        System.out.println("\n" + "Description de l'ensemble des comptes contenus dans le tableau :");
        System.out.println("--------------------------------------------------------------------------");
        AgenceBancaireTest.ensembleComptes();

        System.out.println("\n" + "Appliquons le traitement quotidien sur tous les comptes du tableau, puis les affichons :");
        System.out.println("------------------------------------------------------------------------------");
        AgenceBancaireTest.traitementQuotidien();
        AgenceBancaireTest.ensembleComptes();
        
        

        System.out.println("\n" + "S O R T");
        System.out.println("-------------------------------------------------------------------------");

        CompteCourant c1 = new CompteCourant("Martin1", "Rue Dubois");
        CompteEpargne c2 = new CompteEpargne("Martin2", "Rue Dubois");
        CompteCourant c3 = new CompteCourant("Martin3", "Rue Dubois");
        CompteEpargne c4 = new CompteEpargne("Martin4", "Rue Dubois");
        CompteCourant c5 = new CompteCourant("Martin5", "Rue Dubois");

        AgenceBancaire ab = new AgenceBancaire();

        ab.ajouterCompte(CompteCourantTiti);
        ab.ajouterCompte(c5);
        ab.ajouterCompte(CompteCourantToto);
        ab.ajouterCompte(c3);
        ab.ajouterCompte(c1);
        ab.ajouterCompte(compteEpargneTest);
        ab.ajouterCompte(c2);
        ab.ajouterCompte(c4);
        System.out.println("\n" + "Affichons les numéros de compte avant de trier");
        ab.afficherNumeroComptes();
        System.out.println("\n" + "Trions les numéros de compte");
        ab.sort();
        ab.afficherNumeroComptes();
        }
        catch (Exception ex) {
        ex.printStackTrace();
        }



    }
}
